package com.cskaoyan.javase.oop2._1extend._5notice;

/**
 * @description: 使用继承的注意事项
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 继承中,子类会得到父类的所有成员,那么:
 *      1,私有成员能不能被继承?
 *      我们直接写代码,发现子类对象不能去访问父类中的私有成员,但是不能访问有两种情况:
 *          a,确实没继承
 *          b,继承了,但是没权限
 *       通过父类的私用成员变量的getter方法,我们发现确实继承了,但是没有权限去访问
 *
 *      2,构造器能不能继承?
 *      首先,构造器不属于成员,其次构造器的作用是创建自身对象时给成员变量赋值,而且每个类都有自己的构造方法
 *      没有必要去继承别人的构造器
 *      所以构造器不参与继承,不能被子类继承
 *
 *      3,静态成员能不能继承?
 *      可以继承,子类是可以用子类类名点的形式去访问父类的静态成员
 *      但是我们一般考虑的继承,不考虑静态成员,静态成员的继承也不是严格意义上的继承
 *
 * 使用继承,不是滥用的,不能说仅仅为了复用成员就去继承,而更需要考虑两个类之间"is-a"关系
 * 比如狗也有名字,也有年龄,让人去继承为了复用成员,这显然不合适
 *
 * 为了更好的使用继承,要求程序员也对业务具有一定的了解
 * 云主机业务当中,存在以下几种业务:
 *      云主机
 *      弹性伸缩
 *      裸金属
 *
 */
public class Demo {
    public static void main(String[] args) {
        Son s = new Son();
        //'a' has private access in 'com.cskaoyan.javase.oop2._1extend._5notice.Father'
        //System.out.println(s.a);
        System.out.println(s.getA());
        System.out.println(Son.b);
    }
}
class Father{
    private int a = 10;
    static int b = 20;

    //a的getter方法
    public int getA(){
        return a;
    }
}
class Son extends Father{

}
